#pragma once
// sys
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// local
#include "gtrack.h"

/**
 * @brief
 * 队列结构体
 */
typedef struct {
    uint16_t* items;     // 存储队列元素的数组
    uint16_t capacity;   // 队列容量
    uint16_t size;       // 队列元素个数
    int front;           // 队头指针
    int rear;            // 队尾指针
} Queue;

/** 
 * @brief
 *  初始化队列，并分配内存
 */
void initializeQueue(Queue* q, uint16_t capacity);

/**
 * @brief
 *  清空队列，并释放内存
 */
void freeQueue(Queue* q);

/**
 * @brief
 * 重置队列，不操作内存
 */
void resetQueue(Queue* q);

/**
 * @brief
 *  检查队列是否为空
 */
bool isEmpty(Queue* q);

/**
 * @brief
 * 检查队列是否已满
 */
bool isFull(Queue* q);

/**
 * @brief
 * 入队
 */
void enqueue(Queue* q, int value);

/**
 * @brief
 * 出队
 */
int dequeue(Queue* q);

/**
 * @brief
 * 查看队头元素
 */
int peek(Queue* q);

/**
 * @brief
 * 打印队列内容
 */
void printQueue(Queue* q);